
import java.util.*;

public class Driver {
    public static void main(String[] args) {
        //Declaracion e inicializacion de variables y objetos
        char actual;
        String operacion;
        Scanner readln=new Scanner(System.in);
        Pila<Integer> datos = new Pila<Integer>();
        int numero=0;
        int suma;
        int y=0;
        
        //Se muestran instrucciones
        System.out.println("\n Debe ingresar cada numero y signo separado por un ");
        System.out.println("\n espacio. De tener la operacion un error en formato");
        System.out.println("\n el resultado siempre sera 0");
        System.out.println("\n Ingrese la operacion en postfix que desea realizar");
        //Se lee la operacion del usuario
        operacion=readln.nextLine();
        //Se inicia el ciclo que revisa todas las posiciones del string
        for(int x=0; x<(operacion.length()); x++){
            try{
                actual=operacion.charAt(x);
                y=0;
                suma=0;
                /*
                 * Se revisa si el char en la posicion actual es un numero entre
                 * 0 y 9, verificando segun el ascii, de ser asi verifica si el
                 * caracter en la posicion siguiente es un numero, hasta que 
                 * encuentra algo diferente.
                */
                if((actual>=48)&&(actual<=57)){
                    y=1;
                    while(((x+y)<operacion.length())&&((operacion.charAt(x+y)>=48)&&((operacion.charAt(x+y))<=57))){
                        y++;
                    }
                    int t=y;
                     /*
                      * Revisa todas las posiciones donde se compro que habia una
                      * serie de numeros y une los caracteres en un solo dato
                      * tipo int
                      */
                    for(int n=x; n<(x+y); n++){
                        int dato=(operacion.charAt(n)-48);

                        suma+=dato*(Math.pow(10, t-1));

                        t--;
                    }
                    datos.push(suma);
                }
                /*
                 * Verifica si el caracter en la posicion actual es un signo
                 * para operar y realiza la operacion indicada utilizando datos
                 * del stack.
                 */
                switch (actual){
                    case '+':
                        int r=datos.pop();
                        int s=datos.pop();
                        numero=r+s;
                        datos.push(numero);

                    break;
                    case '-':
                        int atras=datos.pop();
                        numero=datos.pop()-atras;
                        datos.push(numero);
                    break;
                    case '*':
                        numero=datos.pop()*datos.pop();
                        datos.push(numero);

                    break;
                    case '/':
                        int abajo=datos.pop();
                        numero=datos.pop()/abajo;
                        datos.push(numero);

                    break;
     
                }
            }
            catch(Exception exception) {
                System.out.println("\n Error operacion ilegal");
                numero=0;
            }
                    
            x=(x--)+y;
               
        }
        // Imprime el resultado final
        System.out.println("El resultado es: "+ numero);
    }
}